#pragma once

#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void MyDaemon()
{
    // 1. 忽略信号，SIGPIPE，SIGCHLD
    signal(SIGPIPE, SIG_IGN); // sighandler_t signal(int signum, sighandler_t handler);
    signal(SIGCHLD, SIG_IGN);

    // 2. 不要让自己成为组长
    if (fork() > 0)
        exit(0); // 将父进程退出，那么此时运行的就是子进程，其不会成为进程组的组长

    // 3. 调用setsid,该函数能够创建会话并设置进程组id
    setsid(); // pid_t setsid(void);

    // 4. 标准输入，标准输出，标准错误的重定向
    int devnull_fd = open("/dev/null", O_RDONLY | O_WRONLY); // int open(const char *pathname, int flags);
    if(devnull_fd > 0)//文件打开成功
    {
        dup2(devnull_fd, 0);
        dup2(devnull_fd, 1);
        dup2(devnull_fd, 2);

        close(devnull_fd);
    }

}


